package com.ruoyi.quartz.task;

import com.nlf.calendar.Lunar;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.ZodiacCalculator;
import com.ruoyi.financial.domain.FCode;
import com.ruoyi.financial.service.IFCodeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.*;

@Component("financialTask")
public class FinancialTask {
    Map<Integer, String> codeColor = new HashMap<Integer, String>();
    Map<Integer, String> codeFiveElements = new HashMap<Integer, String>();
    String red = "01、02、07、08、12、13、18、19、23、24、29、30、34、35、40、45、46";
    String blue = "03、04、09、10、14、15、20、25、26、31、36、37、41、42、47、48";
    String green = "05、06、11、16、17、21、22、27、28、32、33、38、39、43、44、49";

    String Metals = "02、03、10、11、24、25、32、33、40、41";
    String Tree = "06、07、14、15、22、23、36、37、44、45";
    String Water = "12、13、20、21、28、29、42、43";
    String Fire = "01、08、09、16、17、30、31、38、39、46、47";
    String Earth = "04、05、18、19、26、27、34、35、48、49";

    @PostConstruct
    protected void initColor() {
        Arrays.stream(red.split("、")).forEach(r -> {
            codeColor.put(Integer.valueOf(r), "red");
        });
        Arrays.stream(blue.split("、")).forEach(r -> {
            codeColor.put(Integer.valueOf(r), "blue");
        });
        Arrays.stream(green.split("、")).forEach(r -> {
            codeColor.put(Integer.valueOf(r), "green");
        });

        Arrays.stream(Metals.split("、")).forEach(r -> {
            codeFiveElements.put(Integer.valueOf(r), "金");
        });
        Arrays.stream(Tree.split("、")).forEach(r -> {
            codeFiveElements.put(Integer.valueOf(r), "木");
        });
        Arrays.stream(Water.split("、")).forEach(r -> {
            codeFiveElements.put(Integer.valueOf(r), "水");
        });
        Arrays.stream(Fire.split("、")).forEach(r -> {
            codeFiveElements.put(Integer.valueOf(r), "火");
        });
        Arrays.stream(Earth.split("、")).forEach(r -> {
            codeFiveElements.put(Integer.valueOf(r), "土");
        });
    }

    @Autowired
    IFCodeService codeService;

    public void ryParams(String params) {
        System.out.println("执行有参方法：" + params);
        generateCode(params);
    }

    public void generateCode(String year) {
        if (!StringUtils.hasText(year)) {
            Lunar d = Lunar.fromDate(new Date());
            year = String.valueOf(d.getYear());
        }
        List<FCode> fCodeList = new ArrayList<>();
        for (int i = 1; i <= 49; i++) {
            FCode code = new FCode();
            code.setCode(i);
            code.setYear(Integer.parseInt(year));
            code.setDelFlag("0");
            code.setColor(codeColor.get(i));
            ZodiacCalculator zodiacCalculator = new ZodiacCalculator();
            String zodiac = zodiacCalculator.getZodiacByAge(i);
            String zodiacCode = zodiacCalculator.getZodiacCodeByAge(i);
            code.setZodiac(zodiac);
            code.setZodiacCode(zodiacCode);
            code.setSize(i >= 20 ? 1 : 0);
            code.setCreateTime(new Date());
            code.setSod(i % 2 == 0 ? 1 : 0);
            code.setFiveElements(codeFiveElements.get(i));
            code.setHead(i / 10);
            code.setTail(i % 10);
            fCodeList.add(code);
        }
        codeService.deleteFCodeByYear(Integer.parseInt(year));
        codeService.batchInsert(fCodeList);

    }

    public static void main(String[] args) {
        System.out.println("tail=" + (9 % 10));
        System.out.println("head=" + 9 / 10);

    }

}
